#pragma once

#include "base_compat.h"

#include "space\types.h"
#include "space\property_container.h"
#include "space\reference_tracker.h"
#include "space\simple_factory.h"

namespace space {		
	class entity;
	
	class component : 
		public bit<component>,
		public reference_tracker<component>,
		public simple_factory
	{
	public:
		component(u_int64 id, std::string name);
		component(std::string name);
		component(u_int64 id);
		component();
		~component();

		DECLARE_MEMBER(shared_ptr<entity>, owner);
		DECLARE_MEMBER(bool, valid);
	protected:

	};
	typedef shared_ptr<component> component_ptr;
};